# 构建数据结构栈  
class Stack:    
    def __init__(self):    
        # 初始化一个空列表来存储栈元素    
        self.items = []    
    
    def is_empty(self):    
        # 检查栈是否为空    
        return len(self.items) == 0    
    
    def push(self, item):    
        # 向栈中添加元素    
        self.items.append(item)    
    
    def pop(self):    
        # 从栈中移除并返回最后添加的元素     
        if self.is_empty():    
            raise IndexError("尝试从空栈中弹出元素")    
        return self.items.pop()    
    
    def peek(self):    
        # 返回最后添加的元素但不移除它      
        if self.is_empty():    
            raise IndexError("尝试从空栈中查看元素")    
        return self.items[-1]   
  
    def clear(self):    
        # 清空栈    
        self.items = []
    
    def size(self):    
        # 返回栈中元素的个数    
        return len(self.items)   
  
def dailyTemperatures(temperatures):    
    stack = Stack()  # 用于存储索引的栈   
    result = [0] * len(temperatures)  # 初始化结果数组，与温度数组等长    
    
    for i in range(len(temperatures)):    
        # 当栈不为空且当前温度大于栈顶索引对应的温度时，说明找到了栈顶索引对应温度的下一个更高温度    
        while not stack.is_empty() and temperatures[i] > temperatures[stack.peek()]:    
            index = stack.pop()  # 弹出栈顶索引    
            result[index] = i - index  # 计算天数差，并存入结果数组对应位置    
        stack.push(i)  # 将当前索引压入栈中    
    
    return result    
    
 
temperatures = [73, 74, 75, 71, 69, 72, 76, 73]    
print(dailyTemperatures(temperatures))